﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;

using System.Threading;
using System.Globalization;
using System.Data.Entity.Core.Objects;
using blacksoft.Constantes;
namespace blacksoft.Controllers
{
    public class NotaCreditoController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();

        // GET: /NotaCredito/
        public ActionResult Index(string tb_IDNotaCredito, string tb_FechaRegistro, string ddl_Estado, string tb_IDDocumentoVenta, string tb_Pasajero, string tb_NroDocPasajero)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }


            bool global = PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.GLOBAL);
            //Seleccionar todas las promociones
            var nota = from d in db.NotaCredito 
                       select d;
            //Local session
            int idTerminal;
            if (!global)
            {
                idTerminal = (int)Session["IDTerminal"];
                nota = from n in nota
                       join p in db.Pasaje on n.IDPasaje equals p.IDPasaje
                       join pv in db.ProgramacionViaje on p.IDProgramacionViaje equals pv.IDProgramacionViaje
                       join r_b in db.Ruta_x_UnidadTransporte on pv.IdRuta_x_UnidadTransporte equals r_b.IdRuta_x_UnidadTransporte
                       join r in db.Ruta on r_b.IDRuta equals r.IDRuta
                       where r.IDTerminal == idTerminal
                       select n;
            }

            //var notacredito = db.NotaCredito.Include(n => n.Pasaje);
            
            var factura = from p in db.DocumentoVenta select p;
            var pasaje = from p in db.Pasaje select p;

            //Filtrar por CÓDIGO NOTA DE CREDITO
            if (!String.IsNullOrEmpty(tb_IDNotaCredito))
            {
                 try
                {
                    int cod = int.Parse(tb_IDNotaCredito);
                    nota = nota.Where(s => s.IDNotaCredito.Equals(cod));
                }
                     catch
                {
                    TempData["index_failure"] = "EL codigo de la Nota de Credito debe ser un numero";
                    return RedirectToAction("Index");
                }
            }

            //Filtrar por FECHA REGISTRO
            if (!String.IsNullOrEmpty(tb_FechaRegistro))
            {
                DateTime aux_date = Convert.ToDateTime(tb_FechaRegistro);
                nota = nota.Where(s => EntityFunctions.TruncateTime(s.FechaRegistro) == EntityFunctions.TruncateTime(aux_date));
            }
            //Filtrar por ESTADO
            if (!String.IsNullOrEmpty(ddl_Estado))
            {
                string estado;
                if (string.Compare(ddl_Estado, "ACTIVA") == 0) estado = "AC";
                else estado = "US";

                nota = nota.Where(s => s.Estado.Equals(estado));

            }

            //Filtrar por CÓDIGO DOCUMENTO DE VENTA
            if (!String.IsNullOrEmpty(tb_IDDocumentoVenta))
            {
                try
                {
                    int cod = int.Parse(tb_IDDocumentoVenta);

                    nota = from n in db.NotaCredito
                                           join p in db.Pasaje on n.IDPasaje equals p.IDPasaje
                                           join v in db.Venta on p.IDReserva equals v.IDReserva
                                           join d in db.DocumentoVenta on v.IDVenta equals d.IDVenta
                                           where d.IDDocumentoVenta==cod
                                           select n;
                    
                }
                catch
                {
                    TempData["index_failure2"] = "EL codigo del Documento de venta debe ser un numero";
                    return RedirectToAction("Index");
                }
                

                
            }


            //Filtrar por Nombre de CLIENTE
            if (!String.IsNullOrEmpty(tb_Pasajero))
            {
                
                nota = from n in db.NotaCredito
                       join p in db.Pasaje on n.IDPasaje equals p.IDPasaje
                       where p.Nombre.Contains(tb_Pasajero) || p.ApellidoPaterno.Contains(tb_Pasajero) || p.ApellidoMaterno.Contains(tb_Pasajero)
                       select n;
            }
            //Filtrar por DOC CLIENTE
            if (!String.IsNullOrEmpty(tb_NroDocPasajero))
            {
                try { 
                nota = from n in db.NotaCredito
                      join p in db.Pasaje on n.IDPasaje equals p.IDPasaje
                      where p.DNI.Equals(tb_NroDocPasajero)
                      select n;
                }
                catch
                {
                    TempData["index_failure3"] = "EL DNI debe ser un numero";
                    return RedirectToAction("Index");
                }
            }


            return View(nota.ToList());
        }
        //daniel

        //public ActionResult Show([Bind(Include = "IDNotaCredito,FechaRegistro,FechaLimite,Subtotal,IGV,Total,IDPasaje,Estado")]ART_NotaCredito notacredito, bool chbxNotaCred)
        //{
        //    Persona aux_persona = new Persona();
        //    Venta aux_venta = new Venta();
        //    NotaCredito aux_nota = new NotaCredito();

        //    ////Llaves involucradas
        //    aux_nota.IDNotaCredito = notacredito.IDVenta;
        //    aux_venta.IDReserva = (int)Session["MODVENTA_IDReserva"];
        //    aux_venta.IDNotaCredito = (notacredito.IDNotaCredito == 0 && !chbxNotaCred ? null : notacredito.IDNotaCredito);
        //    aux_venta.IDPersona = 106;
        //    ////Medio de pago y montos parciales
        //    aux_venta.MedioPago = notacredito.MedioPago;
        //    aux_venta.MontoNotaCredito = notacredito.MontoNotaCredito;
        //    aux_venta.MontoSoles = (decimal)notacredito.MontoSoles;
        //    aux_venta.MontoDolares = (decimal)notacredito.MontoDolares;
        //    aux_venta.MontoTarjeta = notacredito.MontoTarjeta;
        //    aux_venta.MontoEfectivo = (decimal?)aux_venta.MontoSoles + (decimal?)aux_venta.MontoDolares;
        //    //Montos totales e IGV
        //    aux_venta.Total = notacredito.Total;
        //    aux_venta.IGV = (decimal?)(Convert.ToDouble((decimal)aux_venta.Total) * 0.19);
        //    aux_venta.Subtotal = aux_venta.Total - aux_venta.IGV;
        //    //Otros campos
        //    aux_venta.Estado = "AC";
        //    aux_venta.FechaPago = DateTime.Now;

        //    db.Venta.Add(aux_venta);
        //    // daniel para guardar en documentoventa (factura)
        //    db.SaveChanges(); // guardamos venta y se genera IDVenta

        //    DocumentoVenta documentoVenta = new DocumentoVenta();
        //    documentoVenta.Total = aux_venta.Total;
        //    documentoVenta.Subtotal = aux_venta.Subtotal;
        //    documentoVenta.FechaPago = aux_venta.FechaPago;
        //    documentoVenta.IGV = aux_venta.IGV;
        //    documentoVenta.IDVenta = aux_venta.IDVenta;
        //    documentoVenta.Estado = "AC";
        //    documentoVenta.Venta = aux_venta; //enlace con venta
        //    db.DocumentoVenta.Add(documentoVenta);
        //    db.SaveChanges();

        //    return RedirectToAction("Index");

        //}

        // GET: /NotaCredito/Details/5
        public ActionResult Details(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            NotaCredito notacredito = db.NotaCredito.Find(id);
            if (notacredito == null)
            {
                return HttpNotFound();
            }
            return View(notacredito);
        }


        public ActionResult Print(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            NotaCredito notacredito = db.NotaCredito.Find(id);
            if (notacredito == null)
            {
                return HttpNotFound();
            }
            return View(notacredito);
        }



        // GET: /NotaCredito/Create
        public ActionResult Create()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            ViewBag.IDPasaje = new SelectList(db.Pasaje, "IDPasaje", "Nombre");
            return View();
        }

        // POST: /NotaCredito/Create
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "IDNotaCredito,FechaRegistro,FechaLimite,Subtotal,IGV,Total,Estado,IDPasaje")] NotaCredito notacredito)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                db.NotaCredito.Add(notacredito);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.IDPasaje = new SelectList(db.Pasaje, "IDPasaje", "Nombre", notacredito.IDPasaje);
            return View(notacredito);
        }

        // GET: /NotaCredito/Edit/5
        public ActionResult Edit(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            NotaCredito notacredito = db.NotaCredito.Find(id);
            if (notacredito == null)
            {
                return HttpNotFound();
            }
            ViewBag.IDPasaje = new SelectList(db.Pasaje, "IDPasaje", "Nombre", notacredito.IDPasaje);
            return View(notacredito);
        }

        // POST: /NotaCredito/Edit/5
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IDNotaCredito,FechaRegistro,FechaLimite,Subtotal,IGV,Total,Estado,IDPasaje")] NotaCredito notacredito)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                db.Entry(notacredito).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.IDPasaje = new SelectList(db.Pasaje, "IDPasaje", "Nombre", notacredito.IDPasaje);
            return View(notacredito);
        }

        // GET: /NotaCredito/Delete/5
        public ActionResult Delete(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            NotaCredito notacredito = db.NotaCredito.Find(id);
            if (notacredito == null)
            {
                return HttpNotFound();
            }
            return View(notacredito);
        }

        // POST: /NotaCredito/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            NotaCredito notacredito = db.NotaCredito.Find(id);
            db.NotaCredito.Remove(notacredito);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

        //daniel para nota de credito
        //public ActionResult Show(int? id)
        //{
        //    if (id == null)
        //    {
        //        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        //    }
        //    NotaCredito notacredito = db.NotaCredito.Find(id); ;
        //    if (notacredito == null)
        //    {
        //        return HttpNotFound();
        //    }
        //    return View(notacredito);
        //}
    }
}
